#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

GENDIR=gen
GEN_INCLUDEDIR=$(GENDIR)/include
GEN_SRCDIR=$(GENDIR)/src
GEN_TARGETDIR=$(GENDIR)/ebin

INCLUDEDIR=include
TARGETDIR=ebin
SRCDIR=src

ALL_INCLUDEDIR=$(GEN_INCLUDEDIR) $(INCLUDEDIR) ../../lib/erl/include
INCLUDEFLAGS=$(patsubst %,-I%, ${ALL_INCLUDEDIR})

MODULES = stress_server test_server test_client test_disklog test_membuffer

INCLUDES = 
TARGETS = $(patsubst %,${TARGETDIR}/%.beam,${MODULES})
HEADERS = $(patsubst %,${INCLUDEDIR}/%.hrl,${INCLUDES})

all: ${GEN_TARGETDIR}/ ${TARGETS}

TEST_RPCFILE = ../ThriftTest.thrift
STRESS_RPCFILE = ../StressTest.thrift
THRIFT = ../../compiler/cpp/thrift

${GENDIR}/: ${RPCFILE}
	rm -rf ${GENDIR}
	${THRIFT} --gen erl ${TEST_RPCFILE}
	${THRIFT} --gen erl ${STRESS_RPCFILE}
	mkdir -p ${GEN_INCLUDEDIR}
	mkdir -p ${GEN_SRCDIR}
	mkdir -p ${GEN_TARGETDIR}
	mv -t ${GEN_INCLUDEDIR} gen-erl/*.hrl
	mv -t ${GEN_SRCDIR} gen-erl/*.erl
	rm -rf gen-erl

${GEN_TARGETDIR}/: ${GENDIR}/
	rm -rf ${GEN_TARGETDIR}
	mkdir -p ${GEN_TARGETDIR}
	erlc ${ERLC_FLAGS} ${INCLUDEFLAGS} -o ${GEN_TARGETDIR} ${GEN_SRCDIR}/*.erl

$(TARGETS): ${TARGETDIR}/%.beam: ${SRCDIR}/%.erl ${GEN_INCLUDEDIR}/ ${HEADERS}
	mkdir -p ${TARGETDIR}
	erlc ${ERLC_FLAGS} ${INCLUDEFLAGS} -o ${TARGETDIR} $<

clean:
	rm -f ${TARGETDIR}/*.beam
	rm -rf ${GENDIR}
